package com.ingenio.dao;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.ingenio.Adapter;
import com.ingenio.business.Localidad;
import com.ingenio.business.Provincia;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

public class LocalidadAdapter extends Adapter{
	
	public Localidad devolverLocalidad(Integer id) throws Exception{
    	Connection conn = null;
    	Localidad l = null;
    	ProvinciaAdapter pa = new ProvinciaAdapter();
    	Provincia p = null;
    	PreparedStatement stmt = null;
    	try {
    		conn = (Connection) abrirConexion();
    		String sel ="SELECT codPostal, descLocalidad, IdProvincia FROM localidad WHERE IdLocalidad = ? and locHabilitado = 1";
    		stmt = (PreparedStatement) conn.prepareStatement(sel);
    		stmt.setInt(1, id);
    		
    		ResultSet result = stmt.executeQuery();
    		
    		if(result.next()){
    			Integer idProvincia = result.getInt("IdProvincia");
    			String codPostal = result.getString("codPostal");
    			String descLocalidad = result.getString("descLocalidad");
    			p = pa.devolverProvincia(idProvincia);
    			l = new Localidad(id, codPostal, descLocalidad, p, true);
    		}
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
		return l;
    }
	
	public List<Localidad> devolverLocalidades() throws Exception{
    	Connection conn = null;
    	List<Localidad> localidades = new ArrayList<Localidad>();
    	ProvinciaAdapter pa = new ProvinciaAdapter();
		Provincia p = null;
    	PreparedStatement stmt = null;
		try {
			conn = (Connection) abrirConexion();
    		Localidad l = null;
    		String sel ="SELECT  IdLocalidad, codPostal, descLocalidad, IdProvincia FROM localidad WHERE locHabilitado = 1";
    		stmt = (PreparedStatement) conn.prepareStatement(sel);
    		ResultSet result = stmt.executeQuery();
    		while(result.next()){
    			Integer idLocalidad = result.getInt("IdLocalidad");
    			Integer idProvincia = result.getInt("IdProvincia");
    			String codPostal = result.getString("codPostal");
    			String descLocalidad = result.getString("descLocalidad");
    			p = pa.devolverProvincia(idProvincia);
    			l = new Localidad(idLocalidad, codPostal, descLocalidad, p, true);
    			localidades.add(l);
    		}
		}
		catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
    	return localidades;
    }
	
	public List<Localidad> devolverLocalidadesProvincia(Provincia provincia) throws Exception{
    	Connection conn = null;
    	List<Localidad> localidades = new ArrayList<Localidad>();
    	PreparedStatement stmt = null;
		try {
			conn = (Connection) abrirConexion();
    		Localidad l = null;
    		String sel ="SELECT  IdLocalidad, codPostal, descLocalidad, IdProvincia FROM localidad WHERE locHabilitado = 1 and IdProvincia = ?";
    		stmt = (PreparedStatement) conn.prepareStatement(sel);
    		stmt.setInt(1, provincia.getIdProvincia());
    		ResultSet result = stmt.executeQuery();
    		while(result.next()){
    			Integer idLocalidad = result.getInt("IdLocalidad");
    			String codPostal = result.getString("codPostal");
    			String descLocalidad = result.getString("descLocalidad");
    			l = new Localidad(idLocalidad, codPostal, descLocalidad, provincia, true);
    			localidades.add(l);
    		}
		}
		catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		cerrarConexion(conn);
    	}
    	return localidades;
    }
	
	public void modificarLocalidad(Localidad loc) throws Exception{
    	Connection conn = null;
    	PreparedStatement stmt = null;
    	try {
	    	conn = (Connection) abrirConexion();
	    	String upd ="UPDATE localidad SET descLocalidad = ?,codPostal = ?,IdProvincia = ? WHERE IdLocalidad = ?";
	    	stmt = (PreparedStatement) conn.prepareStatement(upd);
	    	stmt.setString(1, loc.getDescLocalidad());
	    	stmt.setString(2, loc.getCodPostal());
	    	stmt.setInt(3, loc.getProvincia().getIdProvincia());
	    	stmt.setInt(4, loc.getIdLocalidad());
			stmt.execute();
		}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
    }
	
	public void agregarLocalidad(Localidad loc) throws Exception{
		Connection conn = null;
		PreparedStatement stmt = null;
		try {
	    	conn = (Connection) abrirConexion();
	    	String add ="INSERT into localidad (descLocalidad, codPostal, IdProvincia, locHabilitado) " +
					"VALUES (? , ?, ? ,1)";
			stmt = (PreparedStatement) conn.prepareStatement(add);
			stmt.setString(1, loc.getDescLocalidad());
			stmt.setString(2, loc.getCodPostal());
			stmt.setInt(3, loc.getProvincia().getIdProvincia());
	    	stmt.execute();
    	}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
	}
	
	public void eliminarLocalidad(Localidad loc) throws Exception{
    	Connection conn = null;
    	PreparedStatement stmt = null;
    	try {
	    	conn = (Connection) abrirConexion();
	    	String upd ="UPDATE localidad SET locHabilitado = 0 WHERE IdLocalidad = ?";
	    	stmt = (PreparedStatement) conn.prepareStatement(upd);
	    	stmt.setInt(1, loc.getIdLocalidad());
			stmt.execute();
		}
    	catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		//conn.close();
    		cerrarConexion(conn);
    	}
    }
}
